<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 垃圾回收策略
        // 1. 引用计数法（淘汰）
        // 2. 标记清除法（主流）

        // ==> 引用计数法
        // 1. 跟踪记录每个值被引用的次数
        // 2. 如果这个值被引用了一次，那么就记录次数+1
        // 3. 多次引用会累加
        // 4. 如果减少一个引用就-1
        // 5.如果引用次数为0，则释放内存

        // ==> 引用计数法并不是周期性的垃圾回收，什么时候引用次数为0什么时候回收

        // ==> 引用计数法的缺陷：循环引用

        function problem() {
            let oA = {}
            let oB = {}
            oA.c = oB
            oB.d = oA
        }
        problem()

        // 循环引用的时候，堆内存空间中创建的对象相互引用，计数永远不会为0
        // 这个对象会一直占着内存空间，造成内存泄漏
    </script>
</body>

</html>